package com.sfeir.fastcall.activity;

import java.util.ArrayList;
import java.util.Set;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;

import com.sfeir.fastcall.R;
import com.sfeir.fastcall.access.ContactProvider;
import com.sfeir.fastcall.layout.Callback;
import com.sfeir.fastcall.layout.HiveCell;
import com.sfeir.fastcall.layout.HiveCellContentTextView;
import com.sfeir.fastcall.layout.HiveScrolledView;

/**
 * Created by :
 * 
 * 		@author SFEIR
 */

public class ActivityFiltre extends Activity {

	private HiveScrolledView hsv;

	/**
	 * Called when the activity is first created. Responsible for initializing
	 * the UI.
	 */

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
		hsv = new HiveScrolledView(this);
		setContentView(hsv);
		populateContactList();
	}

	/**
	 * Methode populateContactList Permet de recuperer les contacts du
	 * repertoire et de filtrer les contacts, puis afficher les deux premiere
	 * lettres de chaque contact.
	 */
	@SuppressWarnings("unchecked")
	private void populateContactList() {
		new AsyncTask<ArrayList<Void>, Integer, ArrayList<HiveCell>>() {

			protected ArrayList<HiveCell> doInBackground(ArrayList<Void>... obj) {
				return populateBackground();
			}

			protected void onPostExecute(ArrayList<HiveCell> arrayContactHive) {
				// Nous parcourons notre tableau retourne precedement pour l'afficher dans la HiveScrollView
				if(arrayContactHive.size() > 0){
					for (HiveCell cell : arrayContactHive) {
						hsv.getHv().addCell(cell);
					}
					arrayContactHive.clear();
					arrayContactHive = null;
				} else {
					Toast.makeText(ActivityFiltre.this, R.string.no_contacts, 1000).show();
				}
				hsv.setBackgroundResource(R.drawable.bg);
			}
		}.execute();
	}

	/**
	 * Methode populateBackground Permet de filtrer les contacts suivant le
	 * choix de parcour (ici par lettres) de l'utilisateur.
	 * 
	 * @return
	 */
	public ArrayList<HiveCell> populateBackground() {
		// Nous testons s'il y a une valeur passee par l'intent depuis l'ActivityAlphabet (XML & String)
		final Bundle extras = ActivityFiltre.this.getIntent().getExtras();
		final String filtreParent = extras.getString("filtre");
		final Set<String> filtres = ContactProvider.getAPI().filtreListeLetter(filtreParent);
		// Creation et remplissage du tableau de contacts
		final ArrayList<HiveCell> arrayCell = new ArrayList<HiveCell>();
		if(filtres != null){
			for (final String filtre : filtres) {
				// Nombre de contact par filtre
				final int contactNumber = ContactProvider.getAPI().countContacts(filtre);
				//par rapport a nouveauFiltre Initialisation de la liste de contacts, Hivecell affichant deux caracteres d'un groupe de contact
				HiveCell cell = new HiveCell(this);
				HiveCellContentTextView hcg = new HiveCellContentTextView(ActivityFiltre.this, filtre.toUpperCase()+"\n"+"("+contactNumber+")");
	
				cell.addView(hcg);
				cell.setAlphaCell(190);
	
				// Si le nombre de contacts correspondant est > 10, on affiche  une HiveCell contenant la String "nouveauFiltre"
				cell.setCallback(new Callback() {
					@Override
					public void onClick(HiveCell hc) {
						// On envoie la liste de contacts commencant par "nouveauFiltre" via la variable "xml"
						afficherContact(hc);
					}
				});
	
				arrayCell.add(cell);
			}
		}
		return arrayCell;
	}

	private void afficherContact(HiveCell hc) {
		final Intent intentAfficherContact = new Intent(ActivityFiltre.this, ActivityListContacts.class);
		final TextView textViewTemp = (TextView) hc.getChildAt(hc.getChildCount() - 1);
		final String filtre = ((String) textViewTemp.getText()).split("\n")[0];
		intentAfficherContact.putExtra("filtre", filtre);
		startActivity(intentAfficherContact);
	}
}
